<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<!-- 
    对象{}
    对象是一组无序的键值对，是带有属性和方法的集合
    对象是无序的数据集合
    对象的作用是在一个变量上保存多个数据

    对象的属性（成员）
    当对象的属性值为非函数，我们通常称为 属性
    当对象的属性值为函数，我们通常称为 方法

    键值对之间使用逗号,隔开
    键和值之间使用冒号:隔开
    键key必须是字符串，可以使用单引号或双引号或不加引号
    值value可以是任意数据类型

    创建对象：
    var obj1 = {} 直接赋值大括号
    var obj2 = new Object() 构造函数创建对象
    obj1.name = 'laowang'
    obj2.abc = 123
    var obj3 = {// 对象字面量
        name: 'xiaowang'
    }

    访问对象的属性：
        1.使用点访问：对象.属性
        2.使用中括号访问：对象['属性']
    
    使用for/in遍历对象:
    for (var key in obj3){
        console.log(key);
        console.log(obj3[key]);
    }

    修改/添加 对象属性值：
    对象.属性 = 赋值1;
    对象[属性] = 赋值2;

    删除对象属性：
    delete 对象.属性;

    相关属性：
    对象的 constructor 属性，指向创建该对象的构造函数

    函数的 prototype 属性，指向一个对象，通常称为 原型对象 {constructor: f}
        每个函数（构造函数）都有 prototype 属性，在函数创建时由JS引擎自动添加该属性
        作用：添加到构造函数的prototype上的属性方法，被所有构造函数的实例对象共享（继承）

    对象的 __proto__ 属性，指向创建该对象的构造函数的prototype属性
        每个对象都有 __proto__ 这个隐藏属性
        作用：维护原型链
    
    查找对象属性的过程：
        先在对象自身查找，如果没有，通过__proto__依次向上层原型对象查找，一直到null
    
    原型链：
        对象进行属性/方法的引用时，当属性/方法不存在时，JS引擎会去对象的__proto__属性查找，一直查找到null，对象间一系列连接构成了 '原型链'
        简单讲，从对象的__proto__属性开始，连接的所有对象，就是所谓的 原型链
    
 -->

</body>
</html>